package br.com.app.ligasoccer;

import java.util.ArrayList;
import java.util.List;

import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Toast;
import br.com.app.ligasoccer.dao.JogadorDAO;
import br.com.app.ligasoccer.dao.LigaDAO;
import br.com.app.ligasoccer.domain.Jogador;
import br.com.app.ligasoccer.domain.Liga;
import br.com.app.ligasoccer.util.Constantes;

public class JogadorListActivity extends ListActivity implements OnClickListener, OnItemClickListener {
	
	private List<String> jogadores;
	private ArrayAdapter<String> adapter;
	private JogadorDAO jogadorDAO;
	private String idLiga;
	private AlertDialog dialogOpcoes;
	private int jogadorSelecionado;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		
		this.jogadorDAO = new JogadorDAO(this);
		this.idLiga = getIntent().getStringExtra(Constantes.EXTRA_ID_LIGA);
		this.dialogOpcoes = this.criaDialogOpcoes();
		
		getListView().setOnItemClickListener(this);
	}
	
	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		
		this.adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, this.listarJogadores());
		setListAdapter(this.adapter);
	}
	
	private List<String> listarJogadores() {
		this.jogadores = new ArrayList<String>();
		List<Jogador> listaJogadores = this.jogadorDAO.listarJogadores(this.idLiga);
		if (!listaJogadores.isEmpty()) {
			for (Jogador j : listaJogadores) {
				this.jogadores.add(j.getNome());
			}
		}
		return this.jogadores;
	}
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// TODO Auto-generated method stub
		getMenuInflater().inflate(R.menu.lista_jogadores_menu_action, menu);
		return true;
	}
	
	@Override
	public boolean onMenuItemSelected(int featureId, MenuItem item) {
		// TODO Auto-generated method stub
		switch (item.getItemId()) {
			case R.id.novaLiga:
				startActivity(new Intent(this, LigaActivity.class));
				return true;
			case R.id.adicionarJogador:
				this.validaAdicionarJogador();
				return true;
		}
		return super.onMenuItemSelected(featureId, item);
	}
	
	private void validaAdicionarJogador() {
		Liga liga = new LigaDAO(this).carregarLiga(this.idLiga);
		if (this.jogadores.size() < liga.getQuantidadeDeJogadores()) {
			Intent intent = new Intent(this, JogadorActivity.class);
			intent.putExtra(Constantes.EXTRA_ID_LIGA, this.idLiga);
			startActivity(intent);
		} else {
			Toast.makeText(this, R.string.erro_valor_maximo_jogadores, Toast.LENGTH_SHORT).show();
		}
	}
	
	private AlertDialog criaDialogOpcoes() {
		final CharSequence[] items = {
				getString(R.string.editar),
		};
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setItems(items, this);
		return builder.create();
	}

	@Override
	public void onClick(DialogInterface dialog, int which) {
		// TODO Auto-generated method stub
		if (which == 0) {
			Intent intent = new Intent(this, JogadorActivity.class);
			Jogador jogador = this.jogadorDAO.carregarPorNomeELiga(this.jogadores.get(this.jogadorSelecionado), this.idLiga);
			intent.putExtra(Constantes.EXTRA_ID_JOGADOR, String.valueOf(jogador.getId()));
			intent.putExtra(Constantes.EXTRA_ID_LIGA, this.idLiga);
			startActivity(intent);
		}
	}

	@Override
	public void onItemClick(AdapterView<?> parent, View view, int position,
			long id) {
		// TODO Auto-generated method stub
		this.jogadorSelecionado = position;
		this.dialogOpcoes.show();
	}
}
